#pragma once

#include <functional>

// 定义任务类，用于存储任务信息
class Task {
private:
    std::function<void()> task; // 任务函数及其参数

public:
    Task() = default;

    // 构造函数，接收任务函数和参数
    template<typename Func, typename ...Args>
    explicit Task(Func &&func, Args &&... args) {
        // 使用std::bind将任务函数和参数绑定在一起
        task = std::bind(std::forward<Func>(func), std::forward<Args>(args)...);
    }

    // 重载函数调用运算符，用于执行任务
    void operator()() {
        task();
    }
};